package SubClass;

class  SuperClass{
    private  int n;
    SuperClass(){//无参构造器
        System.out.println("SuperClass()");
    }
    SuperClass(int n){
        System.out.println("SuperClass(int n)");
        this.n=n;
    }
}
class Subclass extends SuperClass{
    private int n;
    Subclass(){//自动调用父类的无参构造器 ？创建对象的时候默认调用的是父类的无参构造器 ！
        System.out.println("SubClass()");
    }
    Subclass(int n){
        System.out.println("SubClass(int n)");
        this.n=n;
    }
}
class Subclass2 extends SuperClass{
    private  int n;
    Subclass2(){
        super(300);
        System.out.println("调用的是父类中的有参构造器");
    }
    Subclass2(int n){
        System.out.println("Subclass2(int n)"+n);
        this.n=n;
    }
}


public class TestSuperSub{
    public static void main (String args[]){
        System.out.println("------SubClass 类继承------");
        Subclass sub1= new Subclass();
        Subclass sub2=new Subclass(300);
        System.out.println("------SubClass2 类继承------");
       Subclass2 sub3=new Subclass2();
       Subclass2 sub4=new Subclass2(300);
//       看新建对象的时候调用的是谁的构造器 ！
    }
}
//Ps：在Java继承中，经常会碰上super()方法，今天恰好碰上，小小的研究了一下。
//在子类的构造方法的第一行，必须是第一行调用super()，这样就调用了父类的构造方法，如果父类有多个不同的构造方法，则根据调用super()时传入的参数调用相应的父类构造方法。
//顺便记录下关于Java继承中构造方法的一些东西：
//在调用子类构造方法时，不管调用的是有参还是无参，如果没有在第一行调用super(var xx)，都会默认先调用父类的无参构造方法。
//如果父类中没有无参构造方法，子类中的构造方法则必须调用super(var xx)，否则会报错。
